import PyInstaller.__main__
import os
import shutil

def build_app():
    # 确保目录存在
    directories = ['static', 'templates', 'static/uploads']
    for directory in directories:
        if not os.path.exists(directory):
            os.makedirs(directory)

    # PyInstaller 参数
    params = [
        'run.py',  # 使用新的启动脚本
        '--name=EquipmentManager',  # 生成的exe名称
        '--onefile',  # 打包成单个exe文件
        '--windowed',  # 使用窗口模式
        '--add-data=templates;templates',  # 添加模板目录
        '--add-data=static;static',  # 添加静态文件目录
        '--hidden-import=sqlite3',
        '--hidden-import=flask',
        '--hidden-import=werkzeug',
        '--hidden-import=pandas',
        '--hidden-import=cv2',
        '--hidden-import=pylibdmtx',
        '--hidden-import=numpy',
        '--clean',  # 清理临时文件
    ]

    # 运行 PyInstaller
    PyInstaller.__main__.run(params)

    # 创建发布目录
    if not os.path.exists('release'):
        os.makedirs('release')

    # 复制必要文件到发布目录
    files_to_copy = [
        ('equipment.db', 'equipment.db'),
        ('README.txt', 'README.txt'),
    ]

    for src, dst in files_to_copy:
        if os.path.exists(src):
            shutil.copy2(src, os.path.join('release', dst))

    # 复制生成的exe到发布目录
    shutil.copy2(
        os.path.join('dist', 'EquipmentManager.exe'),
        os.path.join('release', 'EquipmentManager.exe')
    )

    print("打包完成！")
    print("发布文件已生成在: release 目录")

if __name__ == '__main__':
    build_app() 